/*
package com.flyco.modules.system.controller;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.xkcoding.justauth.AuthRequestFactory;
import lombok.extern.slf4j.Slf4j;
import me.zhyd.oauth.model.AuthCallback;
import me.zhyd.oauth.model.AuthResponse;
import me.zhyd.oauth.request.AuthRequest;
import me.zhyd.oauth.utils.AuthStateUtils;
import com.flyco.common.api.vo.Result;
import com.flyco.common.constant.CommonConstant;
import com.flyco.common.system.api.ISysBaseAPI;
import com.flyco.common.system.util.JwtUtil;
import com.flyco.common.util.PasswordUtil;
import com.flyco.common.util.RedisUtil;
import com.flyco.common.util.oConvertUtils;
import com.flyco.modules.system.entity.SysUser;
import com.flyco.modules.system.service.ISysUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

*/
/**
 * @Author scott
 * @since 2018-12-17
 *//*

@Controller
@RequestMapping("/thirdLogin")
@Slf4j
public class ThirdLoginController {
    @Autowired
    private ISysUserService sysUserService;

    @Autowired
    private ISysBaseAPI sysBaseAPI;
    @Autowired
    private RedisUtil redisUtil;
    @Autowired
    private AuthRequestFactory factory;

    @RequestMapping("/render/{source}")
    public void render(@PathVariable("source") String source, HttpServletResponse response) throws IOException {
        log.info("第三方登录进入render：" + source);
        AuthRequest authRequest = factory.get(source);
        String authorizeUrl = authRequest.authorize(AuthStateUtils.createState());
        log.info("第三方登录认证地址：" + authorizeUrl);
        response.sendRedirect(authorizeUrl);
    }

    @RequestMapping("/{source}/callback")
    public String login(@PathVariable("source") String source, AuthCallback callback,ModelMap modelMap) {
        log.info("第三方登录进入callback：" + source + " params：" + JSONObject.toJSONString(callback));
        AuthRequest authRequest = factory.get(source);
        AuthResponse response = authRequest.login(callback);
        log.info(JSONObject.toJSONString(response));
        Result<JSONObject> result = new Result<JSONObject>();
        if(response.getCode()==2000) {

            JSONObject data = JSONObject.parseObject(JSONObject.toJSONString(response.getData()));
            String username = data.getString("username");
            String avatar = data.getString("avatar");
            String uuid = data.getString("uuid");

            //判断有没有这个人
            LambdaQueryWrapper<SysUser> query = new LambdaQueryWrapper<SysUser>();
            query.eq(SysUser::getThirdId, uuid);
            query.eq(SysUser::getThirdType, source);
            List<SysUser> thridList = sysUserService.list(query);
            SysUser user = null;
            if(thridList==null || thridList.size()==0) {
                user = new SysUser();
                user.setActivitiSync(CommonConstant.ACT_SYNC_0);
                user.setDelFlag(CommonConstant.DEL_FLAG_0);
                user.setStatus(1);
                user.setThirdId(uuid);
                user.setThirdType(source);
                user.setAvatar(avatar);
                user.setUsername(uuid);
                user.setRealname(username);

                //设置初始密码
                String salt = oConvertUtils.randomGen(8);
                user.setSalt(salt);
                String passwordEncode = PasswordUtil.encrypt(user.getUsername(), "123456", salt);
                user.setPassword(passwordEncode);
                sysUserService.saveThirdUser(user);
            }else {
                //已存在 只设置用户名 不设置头像
                user = thridList.get(0);
                //user.setUsername(username);
                //sysUserService.updateById(user);
            }
            // 生成token
            String token = JwtUtil.sign(user.getUsername(), user.getPassword());
            redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token);
            // 设置超时时间
            redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME / 1000);
            modelMap.addAttribute("token", token);

        }
        result.setSuccess(false);
        result.setMessage("第三方登录异常,请联系管理员");
        return "thirdLogin";
    }

    @SuppressWarnings("unchecked")
    @RequestMapping(value = "/getLoginUser/{token}", method = RequestMethod.GET)
    @ResponseBody
    public Result<JSONObject> getLoginUser(@PathVariable("token") String token) throws Exception {
        Result<JSONObject> result = new Result<JSONObject>();
        String username = JwtUtil.getUsername(token);

        //1. 校验用户是否有效
        SysUser sysUser = sysUserService.getUserByName(username);
        result = sysUserService.checkUserIsEffective(sysUser);
        if(!result.isSuccess()) {
            return result;
        }
        JSONObject obj = new JSONObject();
        //用户登录信息
        obj.put("userInfo", sysUser);
        //token 信息
        obj.put("token", token);
        result.setResult(obj);
        result.setSuccess(true);
        result.setCode(200);
        sysBaseAPI.addLog("用户名: " + username + ",登录成功[第三方用户]！", CommonConstant.LOG_TYPE_1, null);
        return result;
    }

}
*/
